
# 构建阶段：用于安装依赖和构建项目
FROM node:18 as build

WORKDIR /usr/src/app

# 设置 pnpm 包管理器
RUN npm install -g pnpm --registry=https://registry.npmmirror.com

# 复制 package.json 和 pnpm-lock.yaml
COPY package.json pnpm-lock.yaml ./

# 配置国内镜像并安装依赖
RUN pnpm config set registry https://registry.npmmirror.com && \
    pnpm install --frozen-lockfile

# 复制源代码并构建
COPY . .
RUN npm run build

# 运行阶段：最小化运行时镜像
FROM node:18-alpine

WORKDIR /usr/src/app

# 只复制必要的运行时文件
COPY --from=build /usr/src/app/dist ./dist
COPY --from=build /usr/src/app/package*.json ./

# 再次使用 pnpm 安装生产环境依赖（更轻量）
RUN npm install -g pnpm --registry=https://registry.npmmirror.com && \
    pnpm install --prod --frozen-lockfile && \
    pnpm install -g pm2

# 暴露端口并启动应用
EXPOSE 5000
# 使用 pm2-runtime 启动应用，自动继承 NODE_ENV 等环境变量
CMD ["sh", "-c", "ls -la /usr/src/app && pm2-runtime dist/main.js"]
